"""
生成器进化为协程。

生成器对象可以使用send()方法发送数据，发送的数据会成为生成器函数中通过yield表达式获得的值。这样，生成器就可以作为协程使用，协程简单的说就是可以相互协作的子程序。


"""
def calc_avg():
    """流式计算平均值"""
    total, counter = 0, 0
    avg_value = None
    while True:
        value = yield avg_value
        total, counter = total + value, counter + 1
        avg_value = total / counter


gen = calc_avg()
next(gen)
print(gen.send(10))
print(gen.send(20))
print(gen.send(30))

"""
总结
这个生成器函数可以不断地接收新值，并根据这些值动态计算平均值。
初始调用 next(gen) 是为了初始化生成器，使其准备好接收数据。
之后每次调用 .send(value) 都会向生成器发送一个新值，并更新平均值。
这种设计非常适合实时计算流式数据的平均值。
"""
